package com.mdd.admin.service;

import com.mdd.admin.validate.commons.PageValidate;
import com.mdd.admin.validate.competition.*;
import com.mdd.admin.vo.competition.CompetitionDetailVo;
import com.mdd.admin.vo.competition.CompetitionListedVo;
import com.mdd.admin.vo.competition.CompetitionPlayVo;
import com.mdd.admin.vo.competition.CompetitionSessionListedVo;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.competition.CompetitionMatch;
import com.mdd.common.entity.competition.CompetitionMatchDetail;
import com.mdd.common.entity.competition.CompetitionScore;

import java.util.Map;

/**
 * 赛事列服务接口类
 * @author LikeAdmin
 */
public interface ICompetitionService {

    /**
     * 赛事列列表
     *
     * @author LikeAdmin
     * @param pageValidate 分页参数
     * @param searchValidate 搜索参数
     * @return PageResult<CompetitionListedVo>
     */
    PageResult<CompetitionListedVo> list(PageValidate pageValidate, CompetitionSearchValidate searchValidate);

    /**
     * 赛事列详情
     *
     * @author LikeAdmin
     * @param id 主键ID
     * @return CompetitionDetailVo
     */
    CompetitionDetailVo detail(Integer id);

    /**
     * 赛事列新增
     *
     * @author LikeAdmin
     * @param createValidate 参数
     */
    void add(CompetitionCreateValidate createValidate);

    /**
     * 赛事列编辑
     *
     * @author LikeAdmin
     * @param updateValidate 参数
     */
    void edit(CompetitionUpdateValidate updateValidate);

    /**
     * 赛事列删除
     *
     * @author LikeAdmin
     * @param id 主键ID
     */
    void del(Integer id);

    void examine(CompetitionApplyExamineValidate updateValidate);

    CompetitionSessionListedVo session(CompetitionSessionValidate sessionValidate);

    Integer bisai(CompetitionApplyExamineValidate updateValidate) throws Exception;

    CompetitionMatchDetail playDetail(Integer matchId);

    CompetitionPlayVo play(Integer id, Integer matchId);

    void playAdd(CompetitionMatchDetail updateValidate);

    void playEdit(CompetitionMatchDetail updateValidate);


    void playScoreEdit(CompetitionScore updateValidate) throws NoSuchFieldException, IllegalAccessException;

    PageResult<Map> scheduleList(PageValidate pageValidate, CompetitionScheduleSearchValidate searchValidate);

    PageResult<Map> scoreList(PageValidate pageValidate, CompetitionScoreSearchValidate searchValidate);

    void sessionUp(CompetitionSessionDownValidate sessionValidate);

    void sessionDown(CompetitionSessionDownValidate sessionValidate);

    CompetitionMatch scheduleDetail(Integer id);

    void scheduleEdit(CompetitionScheduleCreateValidate createValidate);
}
